#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <sys/shm.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>



int main(){

  int shmid;
  volatile int *seg;
  int *map_address;
  int pid;
  shmid = shmget (IPC_PRIVATE,sizeof(int)*2 ,IPC_CREAT|0600);
  map_address = shmat(shmid,0,0);
  seg = (int *)map_address;
  *seg = 0;
  pid = fork();

  if(pid>0){
while(*(seg+1) <10){
    if(*seg==1){}
    else{
    *(seg+1) =*(seg+1) +1;
    printf("Vater Prozess hat %d im speicher %p gelegt \n", *(seg+1), &seg);
    *seg =1;
    sleep(1);
        }

  }
  }

  else{
      int erreicht;
        while(*(seg+1) <=10){
    if(*seg==0){}
    else{
    printf("Sohn Prozess hat %d aus dem speicher %p gelesen \n", *(seg+1), &seg);
    *seg=0;
  erreicht = *(seg+1);
  if(erreicht==10){
        exit(0);
  }
  }
  }

  }

return 0;
}






